var express = require('express');
var router = express.Router();
var request = require('request')
var mysql = require('mysql')
var dbConfig = require('../db/dbConfig')
var uuid = require('node-uuid')
var customerSql = require('../db/customerSql')
var syscusSql = require('../db/syscusSql')
var orderSql = require('../db/orderSql')

var pool = mysql.createPool(dbConfig.mysql)   //创建数据库连接池

//向小程序前台返回数据的函数封装
var responseJSON = function (res, ret) {
  if (typeof ret === 'undefined') {
    res.json({
      code: '-200',
      msg: '操作失败'
    })
  } else {
    res.json(ret)     //向客户端返回数据
  }
}

/**   
  *获取顾客openid
	* js_code:小程序传递过来的code属性
	*/
router.get('/getopenid', function(req, res, next) {   //当小程序出现/getopenid请求时，调用该函数
  var param = req.query || req.params
  var code = param.code     //通过解析url获取微信小程序的code数据
  var appid = param.appid   //获取微信小程序的appid数据
  var secret = '723c43c929f60cfbace31adc9ebcb889' //请自主修改自己的小程序secret ,使用的是测试号去https://developers.weixin.qq.com/miniprogram/dev/devtools/sandbox.html登陆查询
  var wx_url = 'https://api.weixin.qq.com/sns/jscode2session?appid='+ appid +'&secret=' + secret + '&js_code='
  + code + '&grant_type=authorization_code';
  //获取openid
  request(wx_url, function (error, response, body) {
    var data = {}
    if (!error && response.statusCode === 200) {      //成功访问wx_url
      var reqData = JSON.parse(body)              //把网页字符串解析为json
      data.openid = reqData.openid
      data.result = {
        code: 200,
        msg: '授权成功'
      }
    } else {
      data.result = {
        code: -1,
        msg: '授权失败'
      }
    }
    responseJSON(res, data)       //返回小程序客户端相应数据
  })
});



/**
 * 获取消费者顾客的个人信息。
 * 1，如果是新顾客，则注册。
 * 2，查询该顾客是否为syscus系统顾客
 * 3，判断该顾客是否存在未完成的订单
 * 4，把这些信息返回给小程序前台
 */
router.post('/login', function (req, res) {
  pool.getConnection(function (err, connection) {
    var param = req.body
    console.log('param的值',param)
    var nickname = param.nickname
    var openid = param.openid
    var _res = res
    var syscusid = ''
    var myCusid = ''
    var limit = false

    //从连接池中取出一个链接
    connection.query(customerSql.queryAll, function (err, res) {
      var data = {}
      var isAdmin = false
      var isHaveOrder = false
      console.log('res的值',res);
      console.log('err的值',err);
      if (res) {
        var isHave = false
        for (let i = 0; i < res.length; i++) {
          if (res[i].OPENID == openid) {
            isHave = true
            syscusid = res[i].CUSID
            myCusid = res[i].CUSID
          }
        }
        if (!isHave) {        //如果顾客表中不存在这个人
          var cusid = uuid.v4()   //为新顾客生成一个id
          myCusid = cusid
          // 在表中插入这个人的信息
          connection.query(customerSql.insert, [cusid, openid, nickname], function (err, result) {
            if (result) {
              data.result = {
                code: 200,
                msg: '成功注册',
                isAdmin: isAdmin
              }
            } else {
              data.result = {
                code: -1,
                msg: '数据库注册失败'
              }
            }
          })
        } else {          //如果顾客表中存在这个人
          //在数据库中查询该顾客的订单
          connection.query(orderSql.selectCusOrder + `'${myCusid}'`, function (err, res) {
            if (res) {
              if (res.length > 0) {
                isHaveOrder = true      //数据库中存在该顾客的订单
              }
            }
          });
          //判断该顾客是否为syscustomer(具有管理权限)
          connection.query(syscusSql.queryAll, function (err, res) {
            if (res) {
              for (let i = 0; i < res.length; i++) {
                if (res[i].CUSID == syscusid) {
                  isAdmin = true
                  limit = res[i].LIMITS
                }
              }
            }
          });
          //填写顾客信息
          setTimeout(() => {
            data.result = {
              code: 200,
              msg: '已注冊',
              isAdmin: isAdmin,
              cusid: myCusid,
              isHaveOrder: isHaveOrder,
              limit: limit
            }
          }, 300);
        }
      }
      //如果从连接池中取出链接失败
      if (err) {
        data.err = err
      }
      // 以JSON格式返回操作结果给前台
      setTimeout(() => {
        responseJSON(_res, data)
      }, 300)
      //释放该链接
      connection.release()
    })
  })
})

module.exports = router;